package com.atguigu.gmall.pms.controller;

import java.util.List;
import java.util.Map;

import com.atguigu.gmall.pms.entity.SpuAttrValueEntity;
import com.atguigu.gmall.pms.vo.ItemSkuAttrsVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.atguigu.gmall.pms.entity.SkuAttrValueEntity;
import com.atguigu.gmall.pms.service.SkuAttrValueService;
import com.atguigu.gmall.common.bean.PageResultVo;
import com.atguigu.gmall.common.bean.ResponseVo;
import com.atguigu.gmall.common.bean.PageParamVo;

/**
 * sku销售属性&值
 *
 * @author gangge
 * @email gangge@atguigu.com
 * @date 2022-09-04 10:20:44
 */
@Api(tags = "sku销售属性&值 管理")
@RestController
@RequestMapping("pms/skuattrvalue")
public class SkuAttrValueController {

    @Autowired
    private SkuAttrValueService skuAttrValueService;

    @ApiOperation("查询spu的所有的sku 每个sku销售属性值和 skuid映射的json字符串")
    @GetMapping("querySkusSaleAttrsJson/{spuId}")
    public ResponseVo<String> querySkusSaleAttrsJson(@PathVariable("spuId")String spuId){
        String json = skuAttrValueService.querySkusSaleAttrsJson(spuId);
        return ResponseVo.ok(json);
    }

    @ApiOperation("查询sku的销售属性值 和 attrId映射的map")
    @GetMapping("querySkuSaleAttr/{skuId}")
    public ResponseVo<Map<Long , String>>  querySkuSaleAttr(@PathVariable("skuId")String skuId){
        Map<Long , String> map = skuAttrValueService.querySkuSaleAttr(skuId);
        return ResponseVo.ok(map);
    }

    //List<ItemSkuAttrsVo>
    //[ {attrId: 3 ,arrtName:"颜色" ,attrValues:["白色","黑色"]} ,{} ]
    @ApiOperation("查询spu下所有的sku的销售属性和值的集合")
    @GetMapping("queryItemSkuAttrsVoBySpuId/{spuId}")
    public ResponseVo<List<ItemSkuAttrsVo>> queryItemSkuAttrsVoBySpuId(@PathVariable("spuId")
                                                                       String spuId){
        List<ItemSkuAttrsVo> itemSkuAttrsVos = skuAttrValueService.queryItemSkuAttrsVoBySpuId(spuId);
        return ResponseVo.ok(itemSkuAttrsVos);
    }
    @ApiOperation("search服务查询sku检索属性和值")
    @GetMapping("sku/{skuId}")
    public ResponseVo<List<SkuAttrValueEntity>> querySkuSearchAttrValues(@PathVariable("skuId")Long skuId){
        List<SkuAttrValueEntity> skuAttrValueEntities =
                skuAttrValueService.querySkuSearchAttrValues(skuId);
        return ResponseVo.ok(skuAttrValueEntities);
    }
    /**
     * 列表
     */
    @GetMapping
    @ApiOperation("分页查询")
    public ResponseVo<PageResultVo> querySkuAttrValueByPage(PageParamVo paramVo){
        PageResultVo pageResultVo = skuAttrValueService.queryPage(paramVo);

        return ResponseVo.ok(pageResultVo);
    }


    /**
     * 信息
     */
    @GetMapping("{id}")
    @ApiOperation("详情查询")
    public ResponseVo<SkuAttrValueEntity> querySkuAttrValueById(@PathVariable("id") Long id){
		SkuAttrValueEntity skuAttrValue = skuAttrValueService.getById(id);

        return ResponseVo.ok(skuAttrValue);
    }

    /**
     * 保存
     */
    @PostMapping
    @ApiOperation("保存")
    public ResponseVo<Object> save(@RequestBody SkuAttrValueEntity skuAttrValue){
		skuAttrValueService.save(skuAttrValue);

        return ResponseVo.ok();
    }

    /**
     * 修改
     */
    @PostMapping("/update")
    @ApiOperation("修改")
    public ResponseVo update(@RequestBody SkuAttrValueEntity skuAttrValue){
		skuAttrValueService.updateById(skuAttrValue);

        return ResponseVo.ok();
    }

    /**
     * 删除
     */
    @PostMapping("/delete")
    @ApiOperation("删除")
    public ResponseVo delete(@RequestBody List<Long> ids){
		skuAttrValueService.removeByIds(ids);

        return ResponseVo.ok();
    }

}
